import axios from 'axios';
import { ElMessage } from 'element-plus';
import { useAuthStore } from '@/stores/authStore';
const expirationDays = 7;
const expires = new Date(Date.now()  + expirationDays * 86400000).toUTCString();


const baseURL = "https://from-master.jw100.com.cn";

// 定义请求配置
const config = {
  baseURL: baseURL || '/api', // 从环境变量中读取 API 地址
  timeout: 10000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json',
  },
};

// 创建 axios 实例
const service = axios.create(config);

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 在请求发送之前做一些处理，例如添加 token
    const token = localStorage.getItem('token');
    if (token) {
      document.cookie  = `token=${token}; expires=${expires}; path=/; Secure; SameSite=Strict`;
      config.headers.token = `${token}`;
    } else {
      // 如果没有token，弹出登录弹窗
      showLoginModal();
    }
    return config;
  },
  (error) => {
    // 请求错误处理
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    // 对响应数据做一些处理
    const { data } = response;
    if (data.code === 1) {
      return data; // 返回实际数据
    } else {
      ElMessage({
        type: 'error',
        message: data.msg, 
      })
      // return data
      return Promise.reject(data);  // 处理业务错误
    }
  },
  (error) => {
    // 响应错误处理
    if (error.response) {
      
      switch (error.response.status) {
        case 401:
          console.error(' 未授权，请重新登录');
          ElMessage({
            type: 'error',
            message: error.response.data.msg, 
          })
          showLoginModal(); // 弹出登录弹窗
          break;
        case 404:
          console.error(' 请求的资源不存在');
          break;
        case 500:
          console.error(' 服务器内部错误');
          break;
        default:
          console.error(' 请求失败，请稍后重试');
      }
    }
    return Promise.reject(error);
  }
);

// 封装常用请求方法
const request = {
  get(url, params) {
    return service.get(url, { params });
  },
  post(url, data, config) {
    return service.post(url, data, config);
  },
  put(url, data) {
    return service.put(url, data);
  },
  delete(url, params) {
    return service.delete(url, { params });
  },
};

export default request;

// 显示登录弹窗的函数
function showLoginModal() {
  const authStore = useAuthStore();
  authStore.showLoginModal();
}